package com.itts.hk.theard;


import com.itts.common.entity.User;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;

public class newTheard extends Thread{

    private Integer age;
    private User user;
    List<User> list=new ArrayList<>();
    CountDownLatch countDownLatch;

    public newTheard(Integer age, User user,CountDownLatch countDownLatch) {
        this.age = age;
        this.user = user;
        this.countDownLatch = countDownLatch;
    }

    public void run(){
        try {
            age+=1;
            if (user.getAge()==13){
                list.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            countDownLatch.countDown();//倒数
            //多线程内部是没有异常处理机制的。所以，我们一定要记得手动加上try，catch，finally。
            // 并且在finally里面执行latch.countDown();方法，确保线程发生异常的情况下，也可以顺利地将正在执行的线程数减一。
            // 否则，如果latch.countDown();得不到执行，你将看不到异常，看不到报错，程序就一直停留在多线程的执行中。
        }
    }
    //todo CountDownLatch与Thread.join
    //CountDownLatch 的作用就是允许一个或多个线程等待其他线程完成操作，看起来有点类似join() 方法，但其提供了比 join() 更加灵活的API。
    //CountDownLatch 可以手动控制在n个线程里调用n次countDown()方法使计数器进行减一操作，也可以在一个线程里调用n次执行减一操作。
    //而 join()的实现原理是不停检查join线程是否存活，如果 join 线程存活则让当前线程永远等待。所以两者之间相对来说还是CountDownLatch使用起来较为灵活。
    //
}
